home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 6
/
FM Towns Free Software Collection 6.iso
/
t_os
/
catlog
/
source
/
main.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-07-08
|
32KB
|
1,182 lines
/*
NIFTYのLOG整理 main.c
by GHH01217 山先
$Header: MAIN.Cv 1.2 93/02/12 22:44:54 山先 Exp $
*/
#define MAIN 1
#include "log.h"
#include <time.h>
#define TEST
#undef TEST
static int set_option_sw = NO;
static void print_now_time_sub( int time , char *str0 )
{
char str1[ 20 ] , str2[ 20 ];
sprintf(str1,"%2d",time);
to_shift_zen_s(str1,str2); strcat(str,str2); strcat(str,str0);
}
void print_now_time()
{
struct tm *timeptr;
time_t secsnow;
/********************************/
/* 現在の日付をシステムから知る */
/********************************/
time( &secsnow ); /* 現在の時刻 */
timeptr = localtime( &secsnow ); /* 構造体に変換 */
strcpy( str , "\n現在の時刻は19" );
print_now_time_sub( timeptr->tm_year , "年" );
print_now_time_sub( timeptr->tm_mon + 1 , "月" );
print_now_time_sub( timeptr->tm_mday , "日 " );
print_now_time_sub( timeptr->tm_hour , "時" );
print_now_time_sub( timeptr->tm_min , "分" );
print_now_time_sub( timeptr->tm_sec ,"秒です。");
printf("%s",str);
}
#ifdef TEST
static void ms( char *mes , char *d )
{
printf("変数<%s>は <%s> です。\n" , mes , d );
}
static void md( char *mes , int d )
{
printf("変数<%s>は %d です。\n" , mes , d );
}
static void mi( char *mes , int d )
{
printf("スイッチ<%s>は " , mes );
if ( d == YES ) { printf("YES"); } else { printf("NO"); };
printf(" です。\n");
}
static void main_loop_sub()
{
mi( "error" , error );
md( "max_catlog" , max_catlog );
mi( "mess_sw" , mess_sw );
mi( "quiet_sw" , quiet_sw );
mi( "no_dir_sw" , no_dir_sw );
mi( "no_partition_line_sw" , no_partition_line_sw );
mi( "make_new_file_001_sw" , make_new_file_001_sw );
mi( "delete_old_file_sw" , delete_old_file_sw );
mi( "search_all_file_sw" , search_all_file_sw );
mi( "display_log_file_sw" , display_log_file_sw );
mi( "Del_forum_name_line_sw" , Del_forum_name_line_sw );
mi( "collect_1_ID_sw" , collect_1_ID_sw );
mi( "No_Time_Stamp_file" , No_Time_Stamp_file );
mi( "Extract_LZH_file_sw" , Extract_LZH_file_sw );
get_yesno();
mi( "Print_Del_Mes_Hyoudai" , Print_Del_Mes_Hyoudai );
mi( "Update_LZH_file_sw" , Update_LZH_file_sw );
mi( "Re_sort_log_sw" , Re_sort_log_sw );
mi( "Break_catlog_sw" , Break_catlog_sw );
mi( "Do_stage_1_sw" , Do_stage_1_sw );
mi( "Do_stage_2_sw" , Do_stage_2_sw );
mi( "Do_stage_3_sw" , Do_stage_3_sw );
md( "touroku_su" , touroku_su );
md( "hatugen_su" , hatugen_su );
md( "max_mojisu" , max_mojisu );
ms( "collect_1_ID" , collect_1_ID );
ms( "output_path" , output_path );
ms( "input_path" , input_path );
ms( "tmp_path" , tmp_path );
ms( "search_file_name" , search_file_name );
}
#endif /* TEST */
void main_loop( )
{
#ifdef TEST
printf("次の設定でCATLOGを実行します。\n");
main_loop_sub();
get_yesno();
#endif
print_now_time();
/****************************************************/
/* IDX_FILE_NAME がない場合は、新しい形式に変更する */
/****************************************************/
check_index_mode(); /* makeidx.c */
check_MakeUpMAIL_mode(); /* sortlog.c */
if ( Re_sort_log_sw == YES ) {
sortlog_main(); print_now_time();
Re_sort_log_sw = NO;
return;
};
if ( SearchSayStartDateSw == YES && SearchSayEndDateSw == YES ) {
if ( strcmp( SearchSayStartDate , SearchSayEndDate ) > 0 ) {
strcpy( str , "検索する発言の年月日の指定に誤りがあります。"
"指定し直して下さい。"
);
error_return( str ); return;
};
};
if ( set_option_sw != YES ) {
printf("\nオプションスイッチの指定が充分ではありません。"
"\n再度設定のし直しをして下さい。"
);
exit( 1 );
};
/******************************************************************/
/* 出力ディレクトリが指定されていない場合は入力ディレクトリとする */
/******************************************************************/
if ( *output_path == '\0' ) {
printf("\n\n出力ディレクトリが設定されていません。"
"\n入力ディレクトリと同じ(%s)にします。いいですか?",
input_path[ 0 ]
);
if ( get_yesno_mes() == YES ) {
strcpy( output_path , input_path[0] );
} else {
printf("\nカレントディレクトリに出力します。いいですか?");
if ( get_yesno_mes() == NO ) {
printf("\n処理を中断します。");
exit( 1 );
};
};
};
if ( Do_stage_1_sw == YES && collect_main() == 0 ) {
print_now_time(); return; /* 発言数が 0 */
};
if ( Do_stage_2_sw == YES ) divide_main();
if ( Break_catlog_sw == YES ) {
print_now_time(); return;
};
if ( Do_stage_3_sw == YES ) catlog_main();
print_now_time();
}
static void append_dir( char *path )
{
int l;
if ( ( l = strlen( path ) ) < 1 ) return;
if ( path[ l - 1 ] != '\\' ) strcat( path , "\\" );
while( *path ) *path++ = toupper( *path );
}
struct Command {
char *mes; /* 画面表示文字列 */
char *sw_name; /* CATLOG.DEF内のスイッチの綴り */
void (*func)( int sw ); /* 関数へのポインタ なければNULL */
};
static void DisplaySwSet( int sw ){
if ( sw == TRUE ) {
mess_sw = YES; quiet_sw = NO; display_log_file_sw = YES;
} else {
mess_sw = YES; quiet_sw = NO; display_log_file_sw = NO;
};
}
static void SilenceSwSet( int sw )
{
if ( sw == TRUE ) { mess_sw = NO;
} else { mess_sw = YES;
};
};
static void ShutUpSwSet( int sw )
{
if ( sw == TRUE ) { mess_sw = NO; quiet_sw = YES;
} else { mess_sw = YES; quiet_sw = NO;
};
};
static void NoDirSwSet( int sw )
{
if ( sw == TRUE ) { no_dir_sw = YES;
} else { no_dir_sw = NO;
};
};
static void NewFile001SwSet( int sw )
{
if ( sw == TRUE ) { make_new_file_001_sw = YES;
} else { make_new_file_001_sw = NO;
};
};
static void NewFilex01SwSet( int sw )
{
if ( sw == TRUE ) { make_new_file_x01_sw = YES;
} else { make_new_file_x01_sw = NO;
};
};
static void NewFilesmallSwSet( int sw )
{
if ( sw == TRUE ) { make_new_file_small_sw = YES;
} else { make_new_file_small_sw = NO;
};
};
static void PartitionSwSet( int sw )
{
if ( sw == TRUE ) { no_partition_line_sw = YES;
} else { no_partition_line_sw = NO;
};
};
static void OldFileSwSet( int sw )
{
if ( sw == TRUE ) { delete_old_file_sw = YES;
} else { delete_old_file_sw = NO;
};
};
static void DelFAPXResFileSwSet( int sw ) /* FAPXのRESファイルの削除 */
{
if ( sw == TRUE ) { delete_FAPX_RES_file_sw = YES;
} else { delete_FAPX_RES_file_sw = NO;
};
};
static void SearchAllFileSwSet( int sw )
{
if ( sw == TRUE ) { search_all_file_sw = YES;
} else { search_all_file_sw = NO;
};
};
static void WithoutHPSwSet( int sw )
{
if ( sw == TRUE ) { without_HP_say_sw = YES;
} else { without_HP_say_sw = NO;
};
};
static void WithoutPATIOSwSet( int sw )
{
if ( sw == TRUE ) { without_PATIO_say_sw = YES;
} else { without_PATIO_say_sw = NO;
};
};
static void WithoutMESSwSet( int sw )
{
if ( sw == TRUE ) { without_MES_say_sw = YES;
} else { without_MES_say_sw = NO;
};
};
static void WithoutMAILSwSet( int sw )
{
if ( sw == TRUE ) { without_MAIL_say_sw = YES;
} else { without_MAIL_say_sw = NO;
};
};
static void WithoutLIBSwSet( int sw )
{
if ( sw == TRUE ) { without_LIB_say_sw = YES;
} else { without_LIB_say_sw = NO;
};
};
static void WithoutBILLSwSet( int sw )
{
if ( sw == TRUE ) { without_BILL_say_sw = YES;
} else { without_BILL_say_sw = NO;
};
};
static void ReSortLogSwSet( int sw )
{
if ( sw == TRUE ) { Re_sort_log_sw = YES;
} else { Re_sort_log_sw = NO;
};
};
static void BreakCatlogSwSet( int sw )
{
if ( sw == TRUE ) {
Do_stage_1_sw = YES; Do_stage_2_sw = YES; Do_stage_3_sw = NO;
Break_catlog_sw = YES;
} else {
Do_stage_1_sw = YES; Do_stage_2_sw = YES; Do_stage_3_sw = YES;
Break_catlog_sw = NO;
};
};
static void ContinueSwSet( int sw )
{
if ( sw == TRUE ) {
Do_stage_1_sw = NO; Do_stage_2_sw = NO; Do_stage_3_sw = YES;
Break_catlog_sw = NO; main_loop(); /* すぐ実行する */
} else {
Do_stage_1_sw = YES; Do_stage_2_sw = YES; Do_stage_3_sw = YES;
Break_catlog_sw = NO;
};
};
static void ForumNameLineSwSet( int sw )
{
if ( sw == TRUE ) { Del_forum_name_line_sw = YES;
} else { Del_forum_name_line_sw = NO;
};
};
static void TimeStampFileSwSet( int sw )
{
if ( sw == TRUE ) { No_Time_Stamp_file = YES;
} else { No_Time_Stamp_file = NO;
};
};
static void QuoteAllSaySwSet( int sw )
{
if ( sw == TRUE ) { Quote_All_Say_sw = YES;
} else { Quote_All_Say_sw = NO;
};
};
static void SetTimeStampSwSet( int sw )
{
if ( sw == TRUE ) { No_Time_Stamp_file = NO;
} else { No_Time_Stamp_file = YES;
};
};
static void ExtractLZHFileSwSet( int sw )
{
if ( sw == TRUE ) { Extract_LZH_file_sw = YES;
} else { Extract_LZH_file_sw = NO;
};
};
static void PrintDelMesHyoudaiSwSet( int sw )
{
if ( sw == TRUE ) { Print_Del_Mes_Hyoudai = YES;
} else { Print_Del_Mes_Hyoudai = NO;
};
};
static void DeleteDeletedSaySwSet( int sw ) /* 削除した発言は削除する */
{
if ( sw == TRUE ) { Delete_Deleted_Say_sw = YES;
} else { Delete_Deleted_Say_sw = NO;
};
};
static void UpdateLZHFileSwSet( int sw )
{
if ( sw == TRUE ) { Update_LZH_file_sw = YES;
} else { Update_LZH_file_sw = NO;
};
};
static void DoFromStage2SwSet( int sw )
{
if ( sw == TRUE ) {
Do_stage_1_sw = NO; Do_stage_2_sw = YES; Do_stage_3_sw = YES;
Break_catlog_sw = NO; main_loop(); /* すぐ実行する */
} else {
Do_stage_1_sw = YES; Do_stage_2_sw = YES; Do_stage_3_sw = YES;
Break_catlog_sw = NO;
};
};
static void DoFromStage3SwSet( int sw )
{
if ( sw == TRUE ) {
Do_stage_1_sw = NO; Do_stage_2_sw = NO; Do_stage_3_sw = YES;
Break_catlog_sw = NO; main_loop(); /* すぐ実行する */
} else {
Do_stage_1_sw = YES; Do_stage_2_sw = YES; Do_stage_3_sw = YES;
Break_catlog_sw = NO;
};
};
static void DoOnlyStage1SwSet( int sw )
{
if ( sw == TRUE ) {
Do_stage_1_sw = YES; Do_stage_2_sw = NO; Do_stage_3_sw = NO;
Break_catlog_sw = NO;
} else {
Do_stage_1_sw = YES; Do_stage_2_sw = YES; Do_stage_3_sw = YES;
Break_catlog_sw = NO;
};
};
static void DoOnlyStage2SwSet( int sw )
{
if ( sw == TRUE ) {
Do_stage_1_sw = NO; Do_stage_2_sw = YES; Do_stage_3_sw = NO;
Break_catlog_sw = NO; main_loop(); /* すぐ実行する */
} else {
Do_stage_1_sw = YES; Do_stage_2_sw = YES; Do_stage_3_sw = YES;
Break_catlog_sw = NO;
};
};
static void DoOnlyStage3SwSet( int sw )
{
if ( sw == TRUE ) {
Do_stage_1_sw = NO; Do_stage_2_sw = NO; Do_stage_3_sw = YES;
Break_catlog_sw = NO; main_loop(); /* すぐ実行する */
} else {
Do_stage_1_sw = YES; Do_stage_2_sw = YES; Do_stage_3_sw = YES;
Break_catlog_sw = NO;
};
};
static void MakeIndexFromCATLOGFile( int sw )
{
if ( sw == TRUE ) {
set_option_sw = YES;
check_index_mode(); /* makeidx.c */
check_MakeUpMAIL_mode(); /* sortlog.c */
makeidx_from_catlog_file_main(); /* makeidx.c */
};
}
static void AnswerAllYesSwSet( int sw )
{
if ( sw == TRUE ) { answer_all_sw = YES; answer_sw = YES;
} else { answer_all_sw = NO;
};
}
static void AnswerAllNoSwSet( int sw )
{
if ( sw == TRUE ) { answer_all_sw = YES; answer_sw = NO;
} else { answer_all_sw = NO;
};
}
static void CancelAnswerAllSwSet( int sw )
{
if ( sw == TRUE ) { answer_all_sw = NO;
} else { answer_all_sw = NO;
};
}
static void ClearCollectID( int sw )
{
max_collect_ID = 0;
};
/************************************/
/* メールは1つのファイルで処理する */
/************************************/
static void MakeUpMAILInto1FileSwSet( int sw )
{
if ( sw == TRUE ) { MakeUpMAILInto1FileSw = YES;
} else { MakeUpMAILInto1FileSw = NO;
};
}
static struct Command main_command[] = {
{"ログ表示する", "Display", DisplaySwSet },
{"静かに!! モードで実行", "Silence", SilenceSwSet },
{"だまれ!! モードで実行", "Shut-up", ShutUpSwSet },
{"サブ・ディレクトリの検索を行わない", "No-dir", NoDirSwSet },
{"発言番号x01で新ファイルを作る", "New-file-x01", NewFilex01SwSet },
{"発言番号001で新ファイルを作る", "New-file-001", NewFile001SwSet },
{"より小さな発言番号で新ファイルを作る",
"New-file-small", NewFilesmallSwSet },
{"「*****log整理」を入れない", "No-partition", PartitionSwSet },
{"今日より古いファイルの削除", "Del-old-file", OldFileSwSet },
{"FAPX の RES ファイルの削除",
"Del-FAPX-RES-file", DelFAPXResFileSwSet },
{"全てのファイルを検索の対象に","Search-all-file", SearchAllFileSwSet },
{"HPは整理しない", "Without-HP", WithoutHPSwSet },
{"PATIOは整理しない", "Without-PATIO", WithoutPATIOSwSet },
{"会議室は整理しない", "Without-MES", WithoutMESSwSet },
{"MAILは整理しない", "Without-MAIL", WithoutMAILSwSet },
{"LIBは整理しない", "Without-LIB", WithoutLIBSwSet },
{"BILLは整理しない", "Without-BILL", WithoutBILLSwSet },
{"再度 sort しなおす", "Re-sort-log", ReSortLogSwSet },
{"処理を途中で中断する", "Break-catlog", BreakCatlogSwSet },
{"処理を続行する", "Continue-catlog",ContinueSwSet },
{"FFMHOB MES(xx)の行を削除する",
"Del-forum-name-line", ForumNameLineSwSet },
{"CATLOGで整理したファイルからインデックスを作る",
"Make-Index-from-CATLOG-File", MakeIndexFromCATLOGFile },
{"全ての質問にYESと答える", "Answer-All-YES",AnswerAllYesSwSet },
{"全ての質問にNOと答える", "Answer-All-NO",AnswerAllNoSwSet },
{"コンソール入力を許可する",
"Cancel-Answer-All-Sw", CancelAnswerAllSwSet },
{"全部引用発言とする", "Quote-All-Say",QuoteAllSaySwSet },
{"CATLOG.DONファイルを作らない",
"No-Time-Stamp-file", TimeStampFileSwSet },
{"CATLOG.DONファイルを作る",
"Set-Time-Stamp-file", SetTimeStampSwSet },
{"*.lzhファイルを解凍する",
"Extract-LZH-file", ExtractLZHFileSwSet },
{"CATLOGが削除した発言の表題を表示する",
"Print-Del-Mes-Hyoudai", PrintDelMesHyoudaiSwSet },
{"削除した発言は削除する",
"Delete-Deleted-Say", DeleteDeletedSaySwSet },
{"ログを入力ディレクトリ毎に凍結しながら実行",
"Update-LZH-file", UpdateLZHFileSwSet },
{"clear Collect-ID", "Clear-Collect-ID", ClearCollectID },
{"メールは1つのファイルで処理する",
"MakeUpMAIL-Into1File", MakeUpMAILInto1FileSwSet },
{"第2段階から実行", "Do-from-stage-2", DoFromStage2SwSet },
{"第3段階から実行", "Do-from-stage-3", DoFromStage3SwSet },
{"第1段階のみ実行", "Do-only-stage-1", DoOnlyStage1SwSet },
{"第2段階のみ実行", "Do-only-stage-2", DoOnlyStage2SwSet },
{"第3段階のみ実行", "Do-only-stage-3", DoOnlyStage3SwSet },
{"", "", CATLOG_exit }
};
struct Op_Command {
char *mes; /* 画面表示文字列 */
char *sw_name; /* CATLOG.DEF内のスイッチの綴り */
void (*func)( char * ); /* 関数へのポインタ */
};
static void IndexModeSet( char *str ){ Index_mode = atoi( str ); };
static void FAPXLOGModeSet( char *str )
{
FAPX_LOG_mode = atoi( str );
};
static void MojisuSet( char *str ){ max_mojisu = atol( str ) * 1024L;};
static void OutputdirSet( char *str ){
strcpy( output_path , str ); append_dir( output_path );
};
static void OutputDLListdirSet( char *str ){
strcpy( output_DL_List_path , str ); append_dir( output_DL_List_path );
};
static void
OutputMESListdirSet_sub( const char *f_name , const char *f_n )
{
int done;
FILE *fp;
char *p;
done = is_catlog_file( f_name );
if ( done == 0 ) return;
if ( ( fp=fopen( f_name , "r" ) ) == NULL ) {
/* 起こり得ないエラー */
strcpy( file_name , f_name );
error_open_file( "OutputMESListdirSet_loop(read)" );
};
fgets( str , LINE , fp );
p = str; while( *p != ' ' ) p++; *p = '\0';
if ( done > 0 ) { /* フォーラムの会議室 */
fgets( str , LINE , fp ); fgets( str , LINE , fp );
};
fclose( fp );
without_crlf( str );
if ( ( fp = fopen( output_MES_List_path , "a" ) ) == NULL ) {
strcpy( file_name , output_MES_List_path );
error_open_file( "OutputMESListdirSet_loop(write)" );
};
fprintf( fp , "%s\n%s\n\n" , f_name , str );
fclose( fp );
}
static void OutputMESListdirSet( char *str )
{
set_option_sw = YES;
strcpy( output_MES_List_path , str );
catlog_findfirst_mes_sw = NO;
catlog_findfirst( output_path , OutputMESListdirSet_sub );
};
static void TempdirSet( char *str ){
strcpy(tmp_path,str); append_dir( tmp_path );
check_and_make_output_path( tmp_path );
};
/*************************/
/* ','で区切って指定する */
/* 終了は行末 or ';' */
/*************************/
static void SearchfileSet( char *str0 )
{
char *p;
while( *str0 ) {
while ( isspace( *str0 ) ) str0++;
if ( *str0 == '\0' ) break;
if ( *str0 == ',' ) { str0++; continue; };
if ( *str0 == ';' ) break;
p = str;
while( *str0 ) {
if ( isspace( *str0 ) ) break;
if ( *str0 == ',' ) break;
if ( *str0 == ';' ) break;
*p++ = *str0++;
};
*p = '\0';
if ( strlen( str ) > 12 ) {
printf("S:%s はファイルの長さが長過ぎます",str);
};
p = str;
while( *p ) *p++ = toupper( *p );
if ( max_search_file_name >= MAX_SEARCH_FILE ) {
printf("\nこれ以上 S:xxxxx の指定はできません。\n" );
return;
};
strcpy( search_file_name[ max_search_file_name++ ] , str );
while ( isspace( *str0 ) ) str0++;
if ( *str0 == ',' ) str0++;
if ( *str0 == ';' ) break;
};
};
static void
InputdirSet( char *str0 )
{
char *p;
if ( *str0 == '\0' ) {
set_option_sw = NO;
max_input_path = 0; return;
};
while( *str0 ) {
while ( isspace( *str0 ) ) str0++;
if ( *str0 == '\0' ) break;
if ( *str0 == ',' ) { str0++; continue; };
if ( *str0 == ';' ) break;
p = str;
while( *str0 ) {
if ( isspace( *str0 ) ) break;
if ( *str0 == ',' ) break;
if ( *str0 == ';' ) break;
*p++ = *str0++;
};
if ( ( str < p ) && ( *(p-1) != '\\' ) ) *p++ = '\\';
*p = '\0';
p = str; while( *p ) *p++ = toupper( *p );
if ( max_input_path >= MAX_INPUT_PATH ) {
strcpy(str,"I:xxxxx の指定が多すぎます。"); error_return( str );
};
strcpy( input_path[ max_input_path++ ] , str );
while ( isspace( *str0 ) ) str0++;
if ( *str0 == ',' ) str0++;
if ( *str0 == ';' ) break;
};
set_option_sw = YES;
main_loop();
};
static void
WithoutInputdirSet( char *str0 )
{
char *p;
set_option_sw = NO;
if ( *str0 == '\0' ) {
max_without_input_path = 0; return;
};
while( *str0 ) {
while ( isspace( *str0 ) ) str0++;
if ( *str0 == '\0' ) break;
if ( *str0 == ',' ) { str0++; continue; };
if ( *str0 == ';' ) break;
p = str;
while( *str0 ) {
if ( isspace( *str0 ) ) break;
if ( *str0 == ',' ) break;
if ( *str0 == ';' ) break;
*p++ = *str0++;
};
*p = '\0';
p = str; while( *p ) *p++ = toupper( *p );
if ( max_without_input_path >= MAX_WITHOUT_INPUT_PATH ) {
strcpy(str,"Without-I:xxxxx の指定が多すぎます。");
error_return( str );
};
strcpy( without_input_path[ max_without_input_path++ ] , str );
set_option_sw = YES;
while ( isspace( *str0 ) ) str0++;
if ( *str0 == ',' ) str0++;
if ( *str0 == ';' ) break;
};
};
void CollectIDSet( char *str )
{
int i,sw;
char id[ 24 ] , *p;
while ( *str ) {
while ( isspace( *str ) ) str++; /* skip space */
if ( *str == ';' ) break; /* 指定がない */
if ( *str == '\0' ) break; /* 指定がない */
/* 8文字コピー */
p = id; sw = TRUE;
for ( i=0 ; i<8 ; i++ ) {
if ( ( ! isalpha( *str ) ) && ( ! isdigit( *str ) ) ) {
sw = FALSE; break;
};
*p++ = *str++;
};
*p = '\0';
/* 大文字にする */
p = id; for ( i=0 ; i<8 ; i++ ) *p++ = toupper( *p );
if ( sw == FALSE || isIDname( id ) == NO ) {
printf("\n<%s>←IDの指定が間違っていますよ。",id);
printf("\n英字3文字+数字5文字で指定して下さい。");
error_end();
};
if ( max_collect_ID >= MAX_COLLECT_ID ) {
printf("\n検索するIDの数が多すぎます。<%d>以下です。\n",
MAX_COLLECT_ID
);
error_end();
};
strcpy( collect_ID[ max_collect_ID ] , id );
max_collect_ID++;
collect_ID_sw = YES;
/* 次の指定 */
while ( isspace( *str ) ) str++;
if ( *str == ',' ) { str++; continue; };
if ( *str!=';' && *str!='\0' ) {
/* error */
printf("<%s>←区切りの指定は','です。\n",str);
if (isalpha(*str)) continue; /* まあ、次も調べよう */
};
return;
};
};
static void CatlogMesFileSet( char *str )
{
mess_check printf("\n");
catlog_mes_file_name_sw = YES;
strcpy( catlog_mes_file_name , str );
catlog_mes_file_open(); /* すぐオープンする 1992.9.15 */
};
/* ○月△日以降の発言を集める */
static void SearchSayStartDateSet( char *str )
{
int i,sw;
/* YYMMDD の形式で指定 ? */
sw = TRUE;
if ( strlen( str ) != 6 ) sw = FALSE;
for ( i=0 ; i<6 ; i++ ) if ( ! isdigit( str[ i ] ) ) sw = FALSE;
if ( sw != TRUE ) {
error_return( "\nYYMMDD(年月日)の6桁の数字で指定して下さい。");
return;
};
strcpy( SearchSayStartDate , str );
SearchSayStartDateSw = YES;
}
/* □月×日以前の発言を集める */
static void SearchSayEndDateSet( char *str )
{
int i,sw;
/* YYMMDD の形式で指定 ? */
sw = TRUE;
if ( strlen( str ) != 6 ) sw = FALSE;
for ( i=0 ; i<6 ; i++ ) if ( ! isdigit( str[ i ] ) ) sw = FALSE;
if ( sw != TRUE ) {
error_return( "\nYYMMDD(年月日)の6桁の数字で指定して下さい。");
return;
};
strcpy( SearchSayEndDate , str );
SearchSayEndDateSw = YES;
}
static void MaxTmp0SizeSet( char *str )
{
max_tmp0_size = atoi( str );
if ( max_tmp0_size <=0 ) max_tmp0_size = 10240;
}
static void IDHandleSet( char *str )
{
set_option_sw = YES;
mess_check print_now_time();
search_id_name_main( str /* 出力ファイル名 */ ); /* search.c */
mess_check print_now_time();
}
static void SearchIDFromCATLOGFile( char *str )
{
char path[ 128 ];
set_option_sw = YES;
strcpy( path , str );
append_dir( path ); /* main.c */
search_id_mes_main( path ); /* search.c */
}
static void def_file( char *filename );
static char *main_set_file_name( char *dst , char *src )
{
int i;
char *p;
p = dst;
for ( i=0 ; i<13 ; i++ ) {
if ( ! isalnum( *src ) ) {
if ( *src != '?'
&& *src != '*'
&& *src != '.'
&& *src != '_'
) break;
};
*p++ = *src++;
};
*p = '\0';
p = dst; while ( *p ) *p++ = toupper( *p ); /* 大文字にする */
return( src );
}
static void WithoutSearchfileSet( char *str )
{
char id[ 24 ];
if ( *str == '\0' ) return;
while ( *str ) {
while ( isspace( *str ) ) str++; /* skip space */
if ( *str == ';' ) break; /* 指定がない */
if ( *str == '\0' ) break; /* 指定がない */
str = main_set_file_name( id , str ); /* 13文字コピー */
if ( max_WithoutSearchFileName >= MAX_WITHOUT_SEARCH_FILE_NAME ) {
printf("\n除外するファイル名の指定が多すぎます。<%d>以下です。\n",
MAX_WITHOUT_SEARCH_FILE_NAME );
error_end();
};
strcpy( WithoutSearchFileName[ max_WithoutSearchFileName ] , id );
max_WithoutSearchFileName++;
/* 次の指定 */
while ( isspace( *str ) ) str++;
if ( *str == ',' ) { str++; continue; };
if ( *str!=';' && *str!='\0' ) {
/* error */
printf("<%s>←区切りの指定は','です。\n",str);
if (isalnum(*str)) continue; /* まあ、次も調べよう */
};
break;
};
};
static void WithoutDelFileSwSet( char *str )
{
char id[ 24 ];
if ( *str == '\0' ) return;
while ( *str ) {
while ( isspace( *str ) ) str++; /* skip space */
if ( *str == ';' ) break; /* 指定がない */
if ( *str == '\0' ) break; /* 指定がない */
str = main_set_file_name( id , str ); /* 13文字コピー */
if ( max_WithoutDelFileName >= MAX_WITHOUT_DEL_FILE_NAME ) {
printf("\nファイル名の指定が多すぎます。<%d>以下です。\n",
MAX_WITHOUT_DEL_FILE_NAME);
error_end();
};
strcpy( WithoutDelFileName[ max_WithoutDelFileName ] , id );
max_WithoutDelFileName++;
/* 次の指定 */
while ( isspace( *str ) ) str++;
if ( *str == ',' ) { str++; continue; };
if ( *str!=';' && *str!='\0' ) {
/* error */
printf("<%s>←区切りの指定は','です。\n",str);
if (isalnum(*str)) continue; /* まあ、次も調べよう */
};
break;
};
}
static void MakeUpDLInto1FileSwSet( char *str )
{
mess_check print_now_time();
MakeUpDLInto1File_main( str ); /* lib.c */
mess_check print_now_time();
}
static struct Op_Command main_op_command[] = {
{"CATLOGのメッセージを記録するファイル",
"CATLOG-MES-FILE:", CatlogMesFileSet },
{"インデックスのモード","Index-Mode:", IndexModeSet },
{"FAPXのログ保存のモード","FAPX-LOG-Mode:", FAPXLOGModeSet },
{"1ファイルの大きさ(1Kバイト単位)","Moji:", MojisuSet },
{"tmp File のディレクトリ指定", "Set-tmp:", TempdirSet },
{"tmp File のサイズの最大値(1Kバイト単位で指定)",
"Max-TMP0-Size:", MaxTmp0SizeSet },
{"出力ドライブ:ディレクトリ", "O:", OutputdirSet },
{"出力ドライブ:ディレクトリ(データライブラリー)",
"DL-O:", OutputDLListdirSet },
{"データライブラリーを1つのファイルにまとめる",
"MakeUpDL-Into1File:", MakeUpDLInto1FileSwSet },
{"ファイルと会議室名の関係",
"MES-Name-O:", OutputMESListdirSet },
{"入力ドライブ:ディレクトリ", "I:", InputdirSet },
{"読み飛ばす入力ディレクトリ", "Without-I:", WithoutInputdirSet },
{"検索するファイル", "S:", SearchfileSet },
{"検索しないファイル", "Without-S:", WithoutSearchfileSet },
{"○月△日以降の発言を集める",
"Search-Start-Day:", SearchSayStartDateSet },
{"×月□日以前の発言を集める",
"Search-End-Day:", SearchSayEndDateSet },
{"IDの発言を集める", "CollectId:", CollectIDSet },
{"IDの発言を集める", "Collect-ID:", CollectIDSet },
{"1人のIDの発言を集める", "Collect-1-ID:",CollectIDSet },
{"整理済のファイルからIDで発言の収集を行う",
"Search-ID-I:", SearchIDFromCATLOGFile },
{"IDとハンドルの対応ファイルを作る", "ID-Handle:", IDHandleSet },
{"CATLOG.DEFファイルを指定する", "f:", def_file },
{"削除から除くファイル名", "Without-Del-FN:", WithoutDelFileSwSet },
{"", "" }
};
static void main_mes_sub( char *str1 , char *str2 )
{
strcpy( str , " -" ); strcat( str , str1 );
strcat( str , "・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・" );
str[ 32 ] = '\0';
strcat( str , str2 ); strcat( str , "。\n" );
puts( str );
}
void main_mes()
{
int i;
char str1[ 40 ];
printf("catlog [-options]\n\ntype 1 options is ...\n\n");
i = 0;
while ( strlen( main_command[i].mes ) != 0 ) {
main_mes_sub( main_command[i].sw_name , main_command[i].mes );
i++;
};
printf("\ntype 2 options is ...\n\n");
i = 0;
while ( strlen( main_op_command[i].mes ) != 0 ) {
strcpy( str1 , main_op_command[i].sw_name );
strcat( str1 , "xxxxx " );
main_mes_sub( str1 , main_op_command[i].mes );
i++;
};
get_yesno();
putchar( '\n' );
}
static void options( char *str )
{
int i , len , sw;
char *p;
void (*func)( );
if ( strlen( str ) == 0 ) return;
i = 0;
while ( strlen( main_command[i].mes ) != 0 ) {
p = main_command[i].sw_name; len = strlen( p );
if ( strncmp( str , p , len ) == 0 ) {
sw = TRUE;
if ( str[ len ] == '-' ) sw = FALSE;
func = main_command[i].func; (*func)( sw );
return;
};
i++;
};
i = 0;
while ( strlen( main_op_command[i].mes ) != 0 ) {
p = main_op_command[i].sw_name;
len = strlen( p );
if ( strncmp( str , p , len ) == 0 ) {
p = str + len;
func = main_op_command[i].func; (*func)( p );
return;
};
i++;
};
printf("\nError Option : <%s>\n\n",str);
get_yesno();
main_mes(); error_end( );
}
static void main_initial( )
{
struct tm *timeptr;
time_t secsnow;
error = NO;
max_catlog = 0;
mess_sw = YES; /* CATLOGの経過報告 */
quiet_sw = NO; /* だまれ! スイッチ */
no_dir_sw = NO; /* サブ・ディレクトリの検索をしない */
no_partition_line_sw = NO; /* 区切りの行なし */
make_new_file_001_sw = NO; /* 001で新ファイルを作る */
make_new_file_small_sw = NO; /* より小さな半減番号で新ファイルを作る */
delete_old_file_sw = NO; /* 今日より古いファイルの消去 */
search_all_file_sw = NO; /* 全ファイルの検索をしない */
display_log_file_sw = NO; /* ログ表示する */
Re_sort_log_sw = NO;
Break_catlog_sw = NO;
Del_forum_name_line_sw = NO; /* - FFMHOB の行を削除する */
collect_ID_sw = NO; /* IDの発言を集める */
max_collect_ID = 0; /* IDの数 */
No_Time_Stamp_file = NO; /* CATLOGDT.TMPを作らない */
Extract_LZH_file_sw = NO; /* *.lzhを解凍しながら実行 */
Print_Del_Mes_Hyoudai = NO; /* 削除した発言の表題を表示する */
Update_LZH_file_sw = NO; /* ログを凍結しながら実行 */
Quote_All_Say_sw = NO;
Delete_Deleted_Say_sw = NO;
catlog_mes_file_name_sw = NO;
touroku_su = hatugen_su = 0;
max_mojisu = MAX_MOJISU_0; /* 初期値800Kバイト */
max_search_file_name = max_input_path = 0;
catlog_mes_file_name[ 0 ] = output_DL_List_path[ 0 ] =
output_path[0] = input_path[0][0] = tmp_path[0] = '\0'; /* clear */
/********************************/
/* 今日の日付をシステムから知る */
/********************************/
time( &secsnow ); /* 現在の時刻 */
timeptr = localtime( &secsnow ); /* 構造体に変換 */
sprintf( today , "%2d%2d%2d00" ,
timeptr->tm_year,
timeptr->tm_mon + 1, /* 月は 1 小さい */
timeptr->tm_mday
);
file_name_space_0( today ); /* file.c */
}
static void def_file( char *filename )
{
int c;
FILE *fpi;
char command[ LINE ];
printf("<%s>で処理を行います。\n",filename);
if ( (fpi=fopen( filename , "r" )) == NULL ) {
printf("%s が見つかりません。",filename);
get_yesno();
return;
};
forever {
c = fscanf( fpi , "%s" , command );
if ( c < 1 || c == EOF ) break;
mess_check {
if ( *command != ';' ) printf("\nCATLOG.DEF = <%s>" , command );
};
switch ( *command ) {
case '@': /* def file の入れ子を認める */
def_file( command + 1 ); break;
case '-':
strcpy( file_name , filename );
options( command + 1 ); break;
case ';': do {
c = fgetc(fpi);
} while ( c != '\n' && c != EOF ); break;
default:
printf("\nError Option : <%s>\n\n" , command );
main_mes(); error_end( ); break;
};
};
fclose( fpi );
}
void main( int argc , char *argv[] )
{
FILE *fpi;
char path_name[128],*p0,*p1;
display_main();
main_initial( );
if ( argc > 1 ) {
/* オプションが指定されている時は、それだけを実行する */
while ( --argc ) {
argv++;
if ( **argv == '-' ) options( *argv + 1 );
};
exit( 0 );
};
/* 起動ドライブを知る */
strcpy( path_name , argv[0] );
p0 = p1 = path_name;
while ( *p1 ) { if ( *p1 == '\\' ) p0 = p1;
p1++;
};
*p0 = '\0';
/***************************************************/
/* ここで起動ディレクトリを探して CATLOG.DEF を入力する */
/***************************************************/
/* 先ず、カレント・ディレクトリから CATLOG.DEF を探す */
strcpy( file_name , "CATLOG.DEF" );
if ( ( fpi = fopen( file_name , "r" ) ) != NULL ) {
fclose( fpi );
def_file( file_name );
} else {
strcpy( file_name , path_name );
strcat( file_name , "\\" );
strcat( file_name , "CATLOG.DEF" );
if ( (fpi=fopen( file_name , "r" )) != NULL ) {
fclose( fpi );
def_file( file_name );
} else {
printf( "\nCATLOG.DEFが見つかりません。"
"\n\nCATLOG.EXPと同じディレクトリに置き、"
"\n\tアイコンの登録の際、"
"ディレクトリ移動有りに設定して下さい。"
);
error_end();
};
};
if ( set_option_sw != YES ) {
printf( "\nCATLOG.DEFの設定が充分ではありません。"
);
exit( 1 );
};
exit( 0 );
}